package 设计模式.创建型.工厂模式.简单工厂模式.为了复用对象而重构四;


import 设计模式.创建型.工厂模式.简单工厂模式.IRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.JsonRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.PropertiesRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.XmlRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.YamlRuleConfigParser;

import java.util.HashMap;
import java.util.Map;

/**
 * 这样就把对象也可以实现复用
 *
 * 现在如果增加一种后缀的配置文件的话，是需要修改本类的，这里有个问题，如何才能做到修改的时候，不需要改动原来的类呢？
 */
public class RuleConfigParserFactory {
    private static final Map<String, IRuleConfigParser> cachedParsers = new HashMap<>();

    static {
        cachedParsers.put("json", new JsonRuleConfigParser());
        cachedParsers.put("xml", new XmlRuleConfigParser());
        cachedParsers.put("yaml", new YamlRuleConfigParser());
        cachedParsers.put("properties", new PropertiesRuleConfigParser());
    }

    public static IRuleConfigParser createParser(String configFormat) {
        if (configFormat == null || configFormat.isEmpty()) {
            //返回null还是IllegalArgumentException全凭你自己说了算
            return null;
        }
        return cachedParsers.get(configFormat.toLowerCase());
    }
}
